package com.lesama.order;

import java.util.Scanner;

/*
* 多态的转型：
* 1.向上转型： 由子到父 -> 父类引用指向子类创建的对象
* 2.向下转型： 由父到子 -> 将父类引用所指向的子类对象，转交给子类类型的引用变量(需要强转)
* 在该案例中若不进行校验，可能出现ClassCastException的类型转换异常，这是因为
* 将国内采购创建的对象强制赋给了海外采购的引用变量，因此需要使用instanceof关键字
* 在强制之前进行判断，保证不会出现这种情况
* */

public class Test {
    public static void main(String[] args) {
        OrderService orderService = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的选择：");
        System.out.println("1.国内采购 2.国外采购");
        int option = sc.nextInt();
        // 同一个行为具有不同表现形式或形态的能力 -- 多态
        switch (option) {
            case 1:
                orderService = new OrderServiceImpl();
                break;
            case 2:
                orderService = new OverseasServiceImpl();
                break;
        }
        if(orderService instanceof OverseasServiceImpl) {
            OverseasServiceImpl osi = (OverseasServiceImpl)orderService;
            osi.check(); // OverseasServiceImpl子特有的方法
        }
        orderService.create();
        orderService.findOne();
        orderService.findList();
        orderService.paid();
        orderService.finish();
        orderService.cancel();
    }
}
